
import java.io.Serializable;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Observable;


public class Document extends Observable implements Serializable  {

	// ************************************************************************************************************
	// Constantes
	// ************************************************************************************************************
	
	// ************************************************************************************************************
	// Attributs
	// ************************************************************************************************************

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String _titre;
	private HashMap<String, Auteur> _auteurs;
	private HashSet<MotCle> _motCles;
	
	
public Document(String titre) {
	
		this.setTitre(titre);
		_auteurs = new HashMap<String, Auteur>();
		_motCles = new HashSet<MotCle>();
		
	} // Fin Constructeur

	//************************************************************************************************************
	// Accesseurs
	// ************************************************************************************************************s

 public void setTitre(String titre){
	_titre = titre;
    } 
 
 public String getTitre(){
	return (_titre);
	} 
 
 public HashSet<MotCle> getMotCles(){
	 return (_motCles);
    } 
 
 public HashMap<String, Auteur> getAuteurs(){
	return (_auteurs);
	} 
 
 public String getAuteur() {
	 String authString = "";
	 Iterator<String> it = this.getAuteurs().keySet().iterator();

     while(it.hasNext()) {
    	 Auteur i = getAuteurs().get(it.next());
    	 
    	 if ( i != null) {
    		 authString += i.getNom() + " " + i.getPrenom();
         	 if ( it.hasNext() ) {
         		 authString += ", ";
         	 }
    	 } else {
    		 Message dialog = new Message("Une erreur est survenue : l'auteur ne semble pas exister");
     		 dialog.setVisible(true);
    	 }
  		 
    }
	 return authString;
 }

	public Auteur getAuteur(String key) {
		if(this._auteurs==null || this._auteurs.isEmpty()){
			Message dialog = new Message("Auteur vide");
			dialog.setVisible(true);
			return(null);
		}
		else{
			 return(this._auteurs.get(key));
		}
	}

//************************************************************************************************************
// Recherche et Ajouts
// ************************************************************************************************************


 public void ajouterAuteur(Auteur a, String key){
	this._auteurs.put(key, a);
	}

public void ajouterMotCle(MotCle motcle) {
	this._motCles.add(motcle);
}

public void supprimer() { //delie les auteurs et mots-cles du document
	if (_motCles!=null) 
	{
		for (MotCle m : _motCles) m.supprimeDocument(this);
		_motCles.clear();
	}
	if (_auteurs!=null) 
	{
		Iterator<String> it = _auteurs.keySet().iterator();
        while(it.hasNext()) { Auteur i = getAuteur(it.next()); i.supprimeDocument(this); }
		_auteurs.clear();
	}
}

public String afficher() { //redefinit dans article et dans ouvrage
	String a = this.getTitre();
	
	return a;
}

}



